home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 22
/
Amiga Format AFCD22 (Jan 1998, Issue 106).iso
/
-in_the_mag-
/
emulation
/
c64-tape
/
turbohd2.asm
< prev
Wrap
Assembly Source File
|
1997-11-17
|
5KB
|
330 lines
*************************************************************************
* TurboTape Loader
* (C) 1995,1997 Per Håkan Sundell
* requires CCS adapter
*************************************************************************
* incdir Devpac:include
*=======================================================================*
* *
* CODE SECTION *
* *
*=======================================================================*
section CODE,code
Main
LEA file_name,A1
BSR ParseArgs
BSR OpenLibraries
BSR PressPlay
TST.L D0
BNE _mbreak
BSR ReadHeader
BSR FoundFile
TST.L D0
BNE _mbreak
BSR PressPlay
TST.L D0
BNE _mbreak
LEA TXT_LOADING,A0
BSR Print
BSR ReadFileData
TST.L D0
BNE _merror
BSR SaveFile
TST.L D0
BNE _mserror
RTS
_merror LEA TXT_LOADERROR,A0
BSR Print
RTS
_mbreak LEA TXT_BREAK,A0
BSR Print
RTS
_mserror LEA TXT_SAVEERROR,A0
BSR Print
RTS
IrqOff
MOVE.W #$4000,$DFF09A
RTS
IrqOn
MOVE.W #$C000,$DFF09A
RTS
ParseArgs
MOVEM.L D1/D2/A1,-(SP)
MOVEQ #$20,D2
_pa1 SUBQ.L #1,D0
BMI _pa3
MOVE.B (A0)+,D1
CMP.B #$20,D1
BEQ _pa1
CMP.B #10,D1
BEQ _pa3
CMP.B #$22,D1
BNE _pa2
MOVE.B D1,D2
SUBQ.L #1,D0
BMI _pa3
MOVE.B (A0)+,D1
_pa2 MOVE.B D1,(A1)+
SUBQ.L #1,D0
BMI _pa3
MOVE.B (A0)+,D1
CMP.B #10,D1
BEQ _pa3
CMP.B D2,D1
BNE _pa2
_pa3 CLR.B (A1)
MOVEM.L (SP)+,D1/D2/A1
RTS
SaveFile
LEA file_header+5,A0
MOVE.L A0,D1
MOVE.L #$3EE,D2
MOVE.L dos_lib,A6
JSR -$1E(A6)
MOVE.L D0,D1
BEQ _sferror
CMP.L #$FFFFFFFF,D0
BEQ _sferror
MOVE.L D1,-(SP)
LEA file_header,A0
MOVE.L A0,D2
MOVEQ #2,D3
MOVE.L dos_lib,A6
JSR -$30(A6)
MOVE.L (SP),D1
LEA file_data,A0
MOVE.L A0,D2
MOVE.L file_length,D3
MOVE.L dos_lib,A6
JSR -$30(A6)
MOVE.L (SP)+,D1
MOVE.L dos_lib,A6
JSR -$24(A6)
MOVEQ #0,D0
RTS
_sferror MOVEQ #1,D0
RTS
ReadFileData
BSR MotorOn
LEA file_data,A0
MOVE.L A0,A1
MOVEQ #0,D0
MOVEQ #0,D1
MOVE.B file_header+1,D0
MOVE.B file_header+3,D1
LSL.W #8,D0
LSL.W #8,D1
MOVE.B file_header,D0
MOVE.B file_header+2,D1
SUB.W D0,D1
ADD.L D1,A1
MOVE.L D1,file_length
BSR ReadSync
MOVEQ #0,D3
_rfd1 BSR ReadByte
MOVE.B D0,(A0)+
EOR.B D0,D3
CMP.L A0,A1
BNE _rfd1
BSR ReadByte
EOR.B D3,D0
MOVE.L D0,-(SP)
BSR MotorOff
MOVE.L (SP)+,D0
AND.L #$FF,D0
RTS
ReadHeader
BSR MotorOn
BSR ReadSync
CMP.B #0,D0
BEQ ReadHeader
LEA file_header,A0
MOVEQ #0,D3
_rh1 BSR ReadByte
MOVE.B D0,0(A0,D3.W)
ADDQ.W #1,D3
CMP.B #$C0,D3
BNE _rh1
BSR MotorOff
RTS
ReadSync
MOVE.W #$7F80,D7
MOVE.W #$40,$DFF0A8
MOVE.W #$80,$DFF09C
MOVE.W #$80,$DFF0A6
_rs1 BTST #6,$BFE001
BEQ _rs4
BSR ReadBit
ROXL.B #1,D2
CMP.B #2,D2
BNE _rs1
MOVEQ #9,D3
_rs2 BSR ReadByte
CMP.B #2,D0
BEQ _rs2
_rs3 CMP.B D3,D0
BNE _rs1
BSR ReadByte
SUBQ.B #1,D3
BNE _rs3
_rs4 RTS
ReadByte
MOVEQ #7,D1
_rby1 BSR ReadBit
ROXL.B #1,D2
DBRA D1,_rby1
MOVE.B D2,D0
RTS
ReadBit
MOVEQ #0,D0
_rb1 OR.B $BFDD00,D0
BTST #4,D0
BEQ _rb1
MOVE.W #$80,$DFF09C
MOVE.W D7,$DFF0AA
MOVE.W $DFF006,$DFF180
MOVE.B #$19,$BFDF00
NOT.B D0
AND.B #2,D0
SUBQ.B #2,D0
RTS
PressPlay
BCLR #5,$BFD100
MOVE.B $BFE001,D0
BSET #5,$BFD100
BTST #5,D0
BEQ _pp2
LEA TXT_PLAY,A0
BSR Print
_pp1 BTST #6,$BFE001
BEQ _pp3
BCLR #5,$BFD100
MOVE.B $BFE001,D0
BSET #5,$BFD100
BTST #5,D0
BNE _pp1
_pp2 MOVEQ #0,D0
RTS
_pp3 MOVEQ #1,D0
RTS
MotorOn
BSR IrqOff
BCLR #7,$BFD100
BCLR #5,$BFD100
MOVE.B #0,$BFD700
MOVE.B #$BE,$BFD600
MOVEQ #0,D0
_mo1 DBRA D0,_mo1
RTS
MotorOff
BSET #7,$BFD100
BSET #5,$BFD100
BCLR #5,$BFD100
BSET #5,$BFD100
BSR IrqOn
RTS
OpenLibraries
LEA doslibrary.MSG,A1
MOVEQ #0,D0
MOVE.L 4,A6
JSR -$198(A6)
MOVE.L D0,dos_lib
MOVE.L dos_lib,A6
JSR -$3C(A6)
MOVE.L D0,std_out
RTS
FoundFile
LEA TXT_FOUND,A0
BSR Print
LEA file_header+5,A0
LEA $10(A0),A1
_ff1 MOVE.B -(A1),D0
CMP.B #$20,D0
BNE _ff2
CMP.L A0,A1
BNE _ff1
_ff2 CLR.B 1(A1)
BSR Print
LEA TXT_LINEFEED,A0
BSR Print
MOVE.L #$200000,D0
_ff3 BTST #6,$BFE001
BEQ _ff4
SUBQ.L #1,D0
BNE _ff3
MOVEQ #0,D0
RTS
_ff4 MOVEQ #1,D0
RTS
Print
MOVEM.L D2/D3/A6,-(SP)
MOVE.L A0,D2
MOVEQ #0,D3
_p1 TST.B (A0)+
BEQ _p2
ADDQ.L #1,D3
BRA _p1
_p2 TST.L D3
BEQ _p3
MOVE.L std_out,D1
MOVE.L dos_lib,A6
JSR -$30(A6)
_p3 MOVEM.L (SP)+,D2/D3/A6
RTS
*=======================================================================*
* *
* DATA SECTION *
* *
*=======================================================================*
Section DATA,data
TXT_PLAY dc.b 10,'PRESS PLAY ON TAPE',$A,0
TXT_FOUND dc.b 'FOUND ',0
TXT_LOADING dc.b 'LOADING',$A,0
TXT_BREAK dc.b 'BREAK ERROR',$A,0
TXT_LOADERROR dc.b 'LOAD ERROR',$A,0
TXT_SAVEERROR dc.b 'UNABLE TO CREATE AMIGA FILE ERROR',$A,0
TXT_LINEFEED dc.b 10,0
doslibrary.MSG dc.b 'dos.library',0,0
Section Bss,BSS
dos_lib ds.l 1
std_out ds.l 1
file_name ds.b 80
file_header ds.b $100
file_length ds.l 1
file_data ds.b $10000
END